package com.tqw.item.controller;


import com.tqw.constant.SecurityConstants;
import com.tqw.entity.JWTUtil;
import com.tqw.entity.Result;
import com.tqw.pojo.Item;
import com.tqw.item.service.ItemService;
import com.tqw.vo.ItemVO;
import com.tqw.vo.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用来展示商品信息
 * @author Alex
 */
@RestController
@RequestMapping("/item")
public class ItemController {

    @Autowired
    private ItemService itemService;

    /**
     * 拉取所有商品信息,并分页展示
     * 请求路径:/item/getItemList
     * 请求类型:get
     * 请求参数:使用pageResult对象接收
     * 返回值: Result<PageResult>
     * @param pageResult
     * @return
     */
    @GetMapping("/getItemList")
    public Result<PageResult> getItemList(PageResult pageResult,
                                          @RequestHeader(SecurityConstants.AUTH_TOKEN)String token){

        Integer userId = ItemController.tokenParsed(token);
        pageResult=itemService.getItemList(pageResult,userId);

        Result<PageResult> result = new Result<>();
        result.setData(pageResult);

        return result;
    }

    /**
     * 获取所有状态为'1'的商品
     * 请求路径: /item/findItemList
     * 请求类型: get
     * 请求参数:
     * 返回值:Reslut<List<Item>>
     * @return
     */
    @GetMapping("/findItemList")
    public Result<List<Item>> findItemList(){

        List<Item> list = itemService.findItemList();

        Result<List<Item>> result = new Result<>();
        result.setData(list);

        return result;
    }

    /**
     * 修改商品状态(0下架 1在售中 2已卖出)
     * 请求路径:/item/updateItemStatus/{id}/{status}/{updated}
     * 请求类型:put
     * 请求参数:
     * 返回值:Result
     * @return
     */
    @PutMapping("/updateItemStatus")
    public Result<?> updateItemStatus(@RequestBody Item item){

        itemService.updateItemStatus(item);
        return new Result<>();
    }


    /**
     * 下架商品(将商品状态从1改为0)
     * 请求路径:/item/downItem/{id}
     * 请求类型:put
     * 请求参数:id
     * 返回值:Result
     * @param id
     * @return
     */
    @PutMapping("/downItem/{id}")
    public Result<?> downItem(@PathVariable Integer id){

        itemService.downItem(id);
        return new Result<>();
    }

    /**
     * 上架商品(将商品状态从0修改成1)
     * 请求路径:/item/putawayItem/{id}
     * 请求类型:put
     * 请求参数:id
     * 返回值:Result
     * @param id
     * @return
     */
    @PutMapping("/putawayItem/{id}")
    public Result<?> putawayItem(@PathVariable Integer id){

        itemService.putawayItem(id);
        return new Result<>();
    }

    /**
     * 删除商品
     * 请求路径:/item/deleteItemById/{id}
     * 请求类型:delete
     * 请求参数:id
     * 返回值:Result
     * @param id
     * @return
     */
    @DeleteMapping("/deleteItemById/{id}")
    public Result<?> deleteItemById(@PathVariable Integer id){

        itemService.deleteItemById(id);
        return new Result<>();

    }

    /**
     * 根据id查询商品
     * 请求路径:/item/{id}
     * 请求类型:get
     * 请求参数:id
     * 返回值:Result<Item>
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result<Item> findItemById(@PathVariable Integer id){

        Item item = itemService.findItemById(id);
        Result<Item> itemResult = new Result<>();
        itemResult.setData(item);
        return itemResult;
    }

    /**
     * 根据id修改商品
     * 请求路径:/item/updateItemById
     * 请求类型:put
     * 请求参数:表单数据
     * 返回值:Result
     * @return
     */
    @PutMapping("/updateItemById")
    public Result<?> updateItemById(@RequestBody Item item){

        itemService.updateItemById(item);
        return new Result<>();
    }

    /**
     * 新增商品(上架)
     * 请求路径: /item/savaItem
     * 请求类型:post
     * 请求参数:表单数据,itemVO接收
     * 返回值: Result
     * @param itemVO
     * @return
     */
    @PostMapping("/saveItem")
    public Result<Item> saveItem(@RequestBody ItemVO itemVO,
                                 @RequestHeader(SecurityConstants.AUTH_TOKEN)String token){

        Integer userId = ItemController.tokenParsed(token);

        itemService.saveItem(itemVO,userId);

        return new Result<>();
    }

    /**
     * 传入前端传回来的token解析出用户id的静态方法
     * @param token
     * @return
     */
    public static Integer tokenParsed(String token){
        Integer id = 1;
        if (token!=null){
            id = JWTUtil.getId(token);
        }
        return id;
    }

}
